package com.aaa.sbm.util;


import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.springframework.util.StringUtils;

import java.io.IOException;
import java.io.InputStream;

/**
 * @fileName:HandlerFtpFileUtil
 * @description: 统一封装ftp上传下载方法
 * @author:LJV
 * @createTime:2020/10/31 11:16
 * @version:1.0.0
 */
public class HandlerFtpFileUtil {

    public static boolean uploadFile(String host, int port, String userName, String passWord
            , String basePath, String savePath, String fileName, InputStream inputStream){
        FTPClient ftpClient=null;
        try {
            //实例化ftp客户端链接对象
            ftpClient=new FTPClient();
            //链接服务器
            ftpClient.connect(host,port);
            //登录服务器
            ftpClient.login(userName,passWord);
            //切换目录（目录不存在，需要自行创建）
            //basePath=/home/ftp/   把所有图片放到 /home/ftp/images/power/user     /home/ftp/images/client
            // savePath = images/power///user  根目录一定存在，但是savePath有可能不存在
            if(!ftpClient.changeWorkingDirectory(basePath+"/"+savePath)){ //不存在，需要创建目录
                //分割自定义目录
                String[] savePathArray=savePath.split("/");
                String tempStr="";
                //循环
                for (String eachSP : savePathArray) {
                    if(StringUtils.isEmpty(eachSP)){
                        continue;
                    }
                    tempStr+="/"+eachSP;  //第一次/images  第二次/images/power  最后/images/power/user
                    if(!ftpClient.changeWorkingDirectory(basePath+tempStr)){
                        //创建目录
                        if(!ftpClient.makeDirectory(basePath+tempStr)){
                            return false;
                        }
                    }
                }
            }
            //设置上传方式
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            //再次切换目录，切换成功，调用客户端提供方法上传
            if(ftpClient.changeWorkingDirectory(basePath+"/"+savePath)){
                //fileName远程服务器文件名称 要求不可以重复   inputStream要上传文件的字节流
                ftpClient.storeFile(fileName,inputStream);
            }else{
                return false;
            }
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(ftpClient!=null){
                    ftpClient.disconnect();
                }
                if(inputStream!=null){
                    inputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return false;
    }
}
